<!--{
    "Title": "教程：Go 入门"
}-->

<p>
  在本教程中，你会简要了解 Go 编程。跟随教程，你将：
</p>

<ul>
  <li>安装 Go（如果你还没有安装）。</li>
  <li>编写简单的 "Hello, world" 代码。</li>
  <li>使用 <code>go</code> 命令执行你的代码。</li>
  <li>
    使用 Go 包（Go Package）发现工具去查找可以在你自己代码中使用的包。
  </li>
  <li>调用外部模块提供的函数（function）。</li>
</ul>

<aside class="Note">
  <strong>提示：</strong> 想了解其他教程，请查看
  <a href="/doc/tutorial/index.html">教程</a>.
</aside>

<h2 id="prerequisites">前提</h2>

<ul>
  <li>
    <strong>一些编程经验。</strong> 这里的代码很简单，但有助于了解一些功能。
  </li>
  <li>
    <strong>一个编辑代码的工具。</strong> 任何文本编辑器都可以。大多数文本编辑器对 Go 都有很好的支持。最受欢迎的是 VSCode(免费)、GoLand（付费）和 Vim（免费）。
  </li>
  <li>
    <strong>命令行终端。</strong> Go可以在任何终端上正常运行，如 Linux 和 Mac ，以及在 PowerShell 或者 Windows 的 cmd。
  </li>
</ul>

<h2 id="install">安装 Go</h2>

<p>只需使用 <a href="/doc/install">下载和安装</a> 步骤。</p>

<h2 id="code">写一些代码</h2>

<p>
  从 Hello, World 开始。
</p>

<ol>
  <li>
    打开命令行并 cd 到你的主目录。
    <p>
      在 Linux 或 Mac 系统上：
    </p>

    <pre>
cd
</pre
    >

    <p>
      在 Windows 系统上:
    </p>

    <pre>
cd %HOMEPATH%
</pre
    >
  </li>

  <li>
    为你的第一个 Go 代码创建一个 hello 目录。
    <p>
      例如：使用下面的命令
    </p>

    <pre>
mkdir hello
cd hello
</pre
    >
  </li>

  <li>
    Enable dependency tracking for your code.

    <p>
      When your code imports packages contained in other modules, you manage
      those dependencies through your code's own module. That module is defined
      by a go.mod file that tracks the modules that provide those packages. That
      go.mod file stays with your code, including in your source code
      repository.
    </p>

    <p>
      To enable dependency tracking for your code by creating a go.mod file, run
      the
      <a href="/ref/mod#go-mod-init"><code>go mod init</code> command</a>,
        giving it the name of the module your code will be in. The name is the
        module's module path. In most cases, this will be the repository
        location where your source code will be kept, such as
        <code>github.com/mymodule</code>. If you plan to publish your module
        for others to use, the module path <em>must</em> be a location from
        which Go tools can download your module.
    </p>

      <p>For the purposes of this tutorial, just use
        <code>example.com/hello</code>.
    </p>

    <pre>
$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello
</pre
    >
  </li>

  <li>
    在你的文本编辑器中，创建一个文件 hello.go，在其中编写你的代码。
  </li>

  <li>
    将以下代码粘贴到 hello.go 文件中，然后保存文件。
    <pre>
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
</pre
    >

    <p>
      这是你的 Go 代码，在这个代码中：
    </p>

    <ul>
      <li>
        声明一个 <code>main</code> 包（包是一种管理功能的方法，它由同一目录中的所有文件组成）。
      </li>
      <li>
        引用流行的
        <a href="http://docscn.studygolang.com/pkg/fmt/"><code>fmt</code> 包</a>,
        其中包含格式化文本的功能，包括打印到控制台。这个包是
        <a href="http://docscn.studygolang.com/pkg">标准库</a>，安装 Go 时就内置了。
      </li>
      <li>
        实现 <code>main</code> 函数打印信息到控制台。当你运行 main 包时，<code>main</code> 函数是默认执行的。
      </li>
    </ul>
  </li>

  <li>
    运行你的代码可以查看结果。

    <pre>
$ go run .
Hello, World!
</pre
    >

    <p>
      这个
      <a href="/cmd/go/#hdr-Compile_and_run_Go_program"><code>go run</code> 命令</a>
      是许多用于使用 Go 完成操作的 <code>go</code> 命令之一。使用下面的命令获取其他的列表：
    </p>

    <pre>
$ go help
</pre
    >
  </li>
</ol>

<h2 id="call">使用外部包的代码</h2>

<p>
  当你的代码需要引用其他代码的时候，你可以在其他的包中找到你想用在自己代码中的功能（function）。
</p>

<ol>
  <li>
    通过使用其他模块中的功能使你的打印信息更加有趣。
    <ol>
      <li>
        访问 pkg.go.dev 并且
        <a href="https://pkg.go.dev/search?q=quote"
          >查找 "quote" 包</a
        >.
      </li>
      <li>
        在搜索结果中找到并点击 <code>rsc.io/quote</code> 包（
        当你看到  <code>rsc.io/quote/v3</code> 包时请暂时忽略）。
      </li>
      <li>
        在左侧 <strong>Documentation</strong> 标签页面的 <strong>Index</strong> 下面的清单里列举的是你可以调用的函数（function）。你将使用的 <code>Go语言</code> 函数。
      </li>
      <li>
        在页面的顶部，注意 <code>quote</code> 包是包含在 <code>rsc.io/quote</code>  模块中的。
      </li>
    </ol>

    <p>
      你可以使用 pkg.go.dev 网站去查找已发布的模块，你可以在你的代码里面使用它。包发布在模块中 -- 就像
      <code>rsc.io/quote</code> -- 其他人可以使用它门。随着新版本对模块的改进，你可以升级代码去使用改进的版本。
    </p>
  </li>

  <li>
    在你的代码里面，引用 <code>rsc.io/quote</code> 包并调用它的 Go 函数。

    <p>
      添加下面高亮的行后，你的代码需要包含以下内容：
    </p>

    <pre>
package main

import "fmt"

<ins>import "rsc.io/quote"</ins>

func main() {
    <ins>fmt.Println(quote.Go())</ins>
}
</pre>
  </li>

  <li>
    添加新的模块必须依赖和 sum。

    <p>
      Go 将添加 <code>quote</code> 模块作为必须（依赖），以及一个 go.sum 文件用于验证模块。
      更多内容查看 Go 模块参考中的 <a href="/ref/mod#authenticating">验证模块</a>。
    </p>
    <pre>
$ go mod tidy
go: finding module for package rsc.io/quote
go: found rsc.io/quote in rsc.io/quote v1.5.2
</pre
    >
  </li>

  <li>
执行你的代码去查看你调用函数所产生的信息。
    <pre>
$ go run .
Don't communicate by sharing memory, share memory by communicating.
</pre
    >

    <p>
      注意，你的代码调用了 <code>Go</code> 的函数，打印出了关于执行的明确信息。
    </p>

    <p>
      当你运行 <code>go mod tidy</code>，它会查找并下载 <code>rsc.io/quote</code> 模块中包含你要引用的包。
      默认情况下，它会下载最新的版本 -- v1.5.2。
    </p>
  </li>
</ol>

<h2 id="write-more">写更多代码</h2>

<p>
  通过这个快速教程，您已安装好了 Go 并学会了一些基础知识。想要学习其他教程已编写更多代码，请查看<a href="/doc/tutorial/create-module.html">创建一个 Go 模块</a>。
</p>
